iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
Google Developers Machine Learning

ML Study Jam -機器學習系列 第 19

Day 19 Raw Data to Features part 2 (如何使用原始資料做實驗)

  • 分享至 

  • xImage
  •  

Feature Enginnering

Raw Data to Features part 2

Qwiklabs – Improve model accuracy with new features

今天最主要談論的問題是要如何透過添加適當的特徵來改善模型的準確率;一樣先創建notebooks接著切換至training-data-analyst> courses> machine_learning> deepdive> 04_features打開a_features.ipynb,開始進行實驗。

  1. 首先當然是引入相關套件與所要使用的資料,這次使用的是房屋的資料集

    • 利用pandas讀取csv檔,pd.read_csv("路徑")
  2. 接著可以利用head()describe()來看文件內的內容

    • head() #印出前五筆
      https://ithelp.ithome.com.tw/upload/images/20190919/20120289l5wmgzsgy8.png
    • describe() #統計所有數據的分布
      https://ithelp.ithome.com.tw/upload/images/20190919/20120289XaUbliqSXC.png
  3. 之後我們必須分測試與驗證集

    • 首先我們要先設定隨機種子這邊使用numpy確保每次切割都是一樣的np.random.seed(seed=1)
    • 接著用總數利用rand()函數做切割
    • 最後分出訓練與驗證資料集
      https://ithelp.ithome.com.tw/upload/images/20190919/20120289oFA8KqCniu.png
  4. 這邊定義一個函數

    • 首先我們會發現total_rooms在上面的時候是有小數點的,但這不太合理,所以我們必須除上households(家庭),才是每間房子平均房間的個數
    • 並且將所有人口除上所有的房間個數,才會是一間房間平均有幾人
    • 當然這些參數都可以由自己做定義
def add_more_features(df):
  df['avg_rooms_per_house'] = df['total_rooms'] / df['households']
  df['avg_persons_per_room'] = df['population'] / df['total_rooms'] 
  return df
  1. 接著就可以設定訓練時的參數了
    • 當然最重要的就是輸入x、輸出y
    • 其他關於batch_size、num_epochs都是可以自己定義的
    • 對了別忘記shuffle,確保資料集交錯
def make_input_fn(df, num_epochs):
  return tf.estimator.inputs.pandas_input_fn(
    x = add_more_features(df),
    y = df['median_house_value'] / 100000, 
    batch_size = 128,
    num_epochs = num_epochs,
    shuffle = True,
    queue_capacity = 1000,
    num_threads = 1
  )
  1. 完成上述設定可以自己定義feature columns看你要接受的參數有哪些

    • 房屋年齡中位數
    • 經緯度
    • 收入中位數
    • 一間房間幾個人
    • 一間屋子有幾個人 ....
      利用tf.feature_column.numeric_column來做設定
      當然也可以設定boundaries來限制選取區段
  2. 最後一個函數設定則是要定義如何同時訓練與驗證

    • def train_and_evaluate(output_dir, num_train_steps):
    • 設定estimator因為是輸出結果是連續,所以利用LinearRegressor
    • 設定TrainSpec、EvalSpec輸入位子與所需幾個步驟,並且EvalSpec加入start_delay_sec(晚幾秒開始)、throttle_secs(每幾秒驗證一次)這兩個參數
    • 最後定義tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)完成宣告
  3. 最後一步當然是開始做訓練

    • 設定輸出資料夾OUTDIR = '輸出位置'
    • 可以利用shutil.rmtree(OUTDIR, ignore_errors = True)tf.summary.FileWriterCache.clear()來重新整理以及清除快取
    • 呼叫train_and_evaluate(OUTDIR,所需步數)就可以求的結果,也可以透過TensorBoard來看輸出曲線
      https://ithelp.ithome.com.tw/upload/images/20190919/20120289rJBm6pOHoN.png
      https://ithelp.ithome.com.tw/upload/images/20190919/20120289cpGmHRBmnX.png

上一篇
Day 18 Raw Data to Features part 1 (原始資料特徵)
下一篇
Day 20 Preprocessing and Feature Creation part 1 (資料預處理)
系列文
ML Study Jam -機器學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言